home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / arexx / dropme.lha / DropMe / DropMe.rexx < prev   
OS/2 REXX Batch file  |  1996-05-12  |  12KB  |  400 lines

  1. /*
  2.  
  3.    $VER: DropMe.rexx V1.0 (12.5.96) © by Nils Görs
  4.  
  5.     Dies ist ein Skript mit welchem man Aktionen automatisieren kann,
  6.     wie z.B. Archive entpacken, Bilder anzeigen, Musik abspielen etc.
  7. */
  8.  
  9.  
  10. /* Informationen über das Ausgabefenster      */
  11. LeftBorder   = 10    /*Abstand linker Rand    */
  12. TopBorder    = 300   /*Abstand vom oberen Rand*/
  13. OutPutWidth  = 640   /*Breite des Fensters    */
  14. OutPutHeight = 150   /*Höhe des Fensters      */
  15.  
  16. OPTIONS RESULTS
  17.  
  18. PARSE ARG PubScreen
  19.  
  20. IF PubScreen == "?" THEN DO
  21.  OPTIONS PROMPT "PUBSCREEN/K: "
  22.  PARSE PULL PubScreen
  23. END
  24.  
  25. CALL _InitAll
  26.  
  27. /*
  28. ** Beschreibung der Applikation
  29. */
  30. appname     = 'DropMe'
  31. applongname = 'DropMe - ©1996 by Nils Görs'
  32. appinfo     = 'Drop and enjoy...'
  33. appversion  = '1.0'
  34. apprelease  = '1'
  35. appdate     = '12.5.96'
  36.  
  37. _maintags:
  38. windowtags = WindowID(1),
  39.              PubScreenName(PubScreen),
  40.              WindowBackfillFB,
  41.              WindowTitle(appname appversion),
  42.              BeginMenu('Projekt'),
  43.              MenuItem('W_PubScreen wechseln',10),
  44.              MenuItem('E_Einstellungen',13),
  45.              MenuItem('B_Beenden',11),
  46.               BeginMenu('Aktion'),
  47.               MenuItem('O_DropMeBase laden',12),
  48.              'HorizGroupA',
  49.              'Space',
  50.              'VertGroupA',
  51.              'Space',
  52.                Button("Bitte File(s) _auswählen",1),
  53.                'Space',
  54.                CenteredText("oder Icon(s) hier fallen lassen."),
  55.                DropBox(2),
  56.              'Space EndGroup Space EndGroup EndProject'
  57.  
  58. /*
  59. ** Unterbrechungssignale
  60. */
  61.  
  62. SIGNAL ON break_c
  63. SIGNAL ON failure
  64. SIGNAL ON halt
  65. SIGNAL ON ioerr
  66. SIGNAL ON syntax
  67.  
  68. app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  69.                    'TRCA_LongName' '"'applongname'"',
  70.                    'TRCA_Info'     '"'appinfo'"',
  71.                    'TRCA_Version'  '"'appversion'"',
  72.                    'TRCA_Release'  '"'apprelease'"',
  73.                    'TRCA_Date'     '"'appdate'"',
  74.                    'TAG_END')
  75.  
  76. IF app ~= '00000000'x THEN DO
  77.  
  78.    window = TR_OPENPROJECT(app,windowtags)
  79.    WindowProject=C2D(window) /* zum Locken des Fensters bei About */
  80.  
  81.    IF window ~= '00000000'x THEN DO
  82.       nummer = 0
  83.  
  84.       DO WHILE nummer = 0
  85.          CALL TR_WAIT(app,'')
  86.  
  87.          DO WHILE TR_HANDLEMSG(app,'event')
  88.  
  89. /******************
  90. *** CLOSEGADGET ***
  91. *******************/
  92.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN nummer = -1
  93.  
  94.             IF event.trm_class = 'TRMS_ICONDROPPED' THEN DO
  95.                SELECT
  96.                   WHEN event.trm_id = 2 THEN DO
  97.                      DO i = 1 TO event.trm_data.0
  98.                         CALL _UseWhatIs event.trm_data.i
  99.                      END
  100.                   END
  101.                  OTHERWISE
  102.                   NOP
  103.                 END
  104.             END
  105.  
  106.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  107.              SELECT
  108.                 WHEN event.trm_id = 1 THEN CALL _OpenRequest
  109.                 WHEN event.trm_id  == 10 THEN CALL _NewPubScreen
  110.                 WHEN event.trm_id  == 11 THEN DO
  111.                     Quit=TR_EasyRequest(app,"Wirklich beenden?",,
  112.                                         "Ja|Nein","TREZ_LockProject" WindowProject)
  113.                     IF Quit == 1 THEN nummer=1
  114.                 END
  115.                 WHEN event.trm_id == 12 THEN CALL RXTR_READFILE(progdir||"/DropMe.base",DropMeBase)
  116.                 WHEN event.trm_id == 13 THEN CALL _Einstellungen
  117.               OTHERWISE
  118.                NOP
  119.              END
  120.             END
  121. /* */
  122.          END
  123.       END
  124.       CALL TR_CLOSEPROJECT(window)
  125.    END
  126.    CALL TR_DELETEAPP(app)
  127. END
  128. EXIT(0)
  129.  
  130. _OpenRequest:
  131.                   bool = ASL_RequestFile(window,filename,,
  132.                                "ASLFR_PubScreenName" PubScreen,
  133.                                "ASLFR_InitialDrawer" Prefs.1,
  134.                                "ASLFR_DoMultiSelect" 1,
  135.                                "ASLFR_DoPatterns" 1,
  136.                                "ASLFR_TitleText" '"Bitte Archive auswählen"')
  137. IF bool == 0 THEN RETURN
  138.  
  139.  DO i = 1 to filename.0
  140.   CALL _UseWhatIs filename.i
  141.  END
  142. RETURN
  143.  
  144.  
  145. _UseWhatIs:
  146. PARSE ARG Dateiname
  147.  typ=RXTR_WHATIS(dateiname)
  148.  
  149.   zeile = RXTR_LSEARCH(typ,DropMeBase,,,)
  150.  
  151.   IF zeile = -1 THEN DO
  152.     CALL TR_EasyRequest(app,"der Filetyp:" Typ,
  153.             NL"wurde nicht gefunden.","OK", "TREZ_Activate" 1 "TREZ_Title" '"Achtung!"' "TREZ_LockProject" WindowProject)
  154.      RETURN
  155.    END
  156.  
  157.   zeile = zeile+1
  158.   UseCommand=DropMeBase.zeile
  159.  
  160. /* Platzhalter, der mit dem Namen der temporären Datei gefüllt wird. */
  161. Position = INDEX(UseCommand,'%f')
  162.  IF Position == 0 THEN DO
  163.     CALL TR_EasyRequest(app,"Sie haben keinen Platzhalter",
  164.             NL"für den Filenamen definiert:",
  165.             NL UseCommand,"OK", "TREZ_Activate" 1 "TREZ_Title" '"Achtung!"' "TREZ_LockProject" WindowProject)
  166.  RETURN
  167. END
  168.  String  = DELSTR(UseCommand,Position,2)
  169.  UseCommand  = INSERT(DateiName,String,Position-1)
  170.  
  171. /* Platzhalter, der mit dem Namen des Zieldevices gefüllt wird. */
  172. Position = INDEX(UseCommand,'%d')
  173.  IF Position ~= 0 THEN DO
  174.    String2     = DELSTR(UseCommand,Position,2)
  175.    UseCommand  = INSERT(Prefs.2,String2,Position-1)
  176.  END
  177.  
  178. /* Platzhalter, der mit dem Namen des PublicScreens gefüllt wird. */
  179. Position = INDEX(UseCommand,'%s')
  180.  IF Position ~= 0 THEN DO
  181.    String2     = DELSTR(UseCommand,Position,2)
  182.    UseCommand  = INSERT(PubScreen,String2,Position-1)
  183.  END
  184.  
  185.  
  186. CALL _OutPut
  187. ADDRESS COMMAND UseCommand
  188. IF (rc) ~= 0 THEN DO
  189.   say "...FEHLER bei" UseCommand
  190.   RETURN
  191. END
  192. CALL CLOSE('STDOUT')
  193. CALL CLOSE('STDIN')
  194. RETURN
  195.  
  196. /**********************************
  197. *** Standard-Output umlenken ;) ***
  198. ***********************************/
  199. _OutPut:
  200. ScreenOutPut = 'CON:'LeftBorder'/'TopBorder'/'OutPutWidth'/'OutPutHeight'/'UseCommand'/SCREEN 'PubScreen'/AUTO/CLOSE'
  201. CALL CLOSE('STDOUT')
  202. IF ~OPEN('STDOUT',ScreenOutPut,'W') THEN
  203.    EXIT(10)
  204.  
  205. CALL CLOSE('STDIN')
  206. CALL OPEN('STDIN','*','W')
  207. CALL PRAGMA('*','STDOUT')
  208. CALL PRAGMA('*','STDIN')
  209. RETURN
  210.  
  211. _InitAll:
  212. NL      = '0a'x
  213. TRUE    = 1
  214. FALSE   = 0
  215. Files.0 = 0
  216.  
  217.    /*
  218.    ** Open libs
  219.    */
  220.  
  221.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  222.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  223.          quit('Cannot open tritonrexx.library!',10)
  224.  
  225.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  226.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  227.          quit('Cannot open rexxtricks.library!',10)
  228.  
  229.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  230.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  231.          quit('Cannot open rexxsupport.library!',10)
  232.  
  233.    /*
  234.    ** Set current dir
  235.    */
  236.  
  237.    PARSE SOURCE . . . script .
  238.    progdir = PATHPART(script)
  239.  
  240.    booll = LENGTH(progdir)
  241.    booli= LASTPOS(":",progdir)
  242.    boolh= LASTPOS("/",progdir)
  243.  
  244.   IF booli <= booll THEN progdir2=progdir||"/"
  245.   IF boolh == 0 THEN progdir2=progdir||"/"
  246.  
  247.    CALL PRAGMA('D',progdir)
  248.  
  249. /* Gibt es einen Parameter für den Bildschirm. Wenn nicht, dann wird
  250.    der Screen auf dem defaultPubScreen geöffnet. */
  251.  
  252. IF PubScreen == "" THEN
  253.    PubScreen = RXTR_GETDEFAULTPUBSCREEN()
  254. CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  255.  
  256. IF RXTR_READFILE(progdir||"/DropMe.prefs",Prefs) == 0 THEN DO
  257. Prefs.0 = 2
  258. Prefs.1 = "Ram:" /* Archive Path */
  259. Prefs.2 = "Ram:" /* OutPutPath */
  260. END
  261.  
  262. IF RXTR_READFILE(progdir||"/DropMe.base",DropMeBase) == 0 THEN DO
  263.  say "Konnte" progdir||"/DopeMe.base nicht finden!"
  264.  EXIT(5)
  265. END
  266.  
  267. RETURN
  268.  
  269. /*******************************************************************
  270.  ***  Routine, die das GUI auf einem neuen PubScreen öffnen läßt ***
  271.  *******************************************************************/
  272. _NewPubScreen:
  273. IF PUBSCREENLIST('ScreenList') == 0 THEN RETURN
  274.  
  275. delstart=LSEARCH(PubScreen,Screenlist)
  276. IF delstart ~= -1 THEN RXTR_STEMREMOVE(ScreenList,delstart)
  277.  
  278. ScreenListTags = WindowID(2),
  279.    WindowBackfillFB,
  280.    WindowPosition('TRWP_MOUSEPOINTER'),
  281.    WindowTitle('neuen PubScreen auswählen'),
  282.    WindowFlags('TRWF_NOCLOSEGADGET|TRWF_NOESCCLOSE'),
  283.    PubScreenName(Pubscreen),
  284.    'VertGroupA',
  285.       'Space',
  286.       'HorizGroupA',
  287.          'Space',
  288.          ListSel('screenlist',301,0),
  289.          'Space',
  290.       'EndGroup',
  291.       'Space',
  292.       'HorizSeparator',
  293.       'Space',
  294.       'HorizGroupA',
  295.       'Space',
  296.       ButtonRE('Abbrechen',302),
  297.       'Space',
  298.    'EndGroup Space EndGroup EndGroup EndProject'
  299.  
  300.     PubScreenProject = TR_OPENPROJECT(app,Screenlisttags)
  301.  
  302.   IF PubScreenProject ~= '00000000'x THEN DO
  303.     CALL TR_LOCKPROJECT(window)
  304.  
  305.       DO WHILE ende ~= 1
  306.          DO WHILE TR_HANDLEMSG(app,'event2')
  307.             IF event2.trm_class = 'TRMS_ACTION' THEN ende = 1 /* Cancel Gadget */
  308.  
  309.             IF event2.trm_class = 'TRMS_NEWVALUE' THEN DO
  310.             nummer = TR_GETATTRIBUTE(PubScreenProject,301,'TRAT_Value')+1
  311.               PubScreen = ScreenList.nummer
  312.               CALL TR_UNLOCKPROJECT(window)
  313.               CALL TR_CLOSEPROJECT(PubScreenProject)
  314.               CALL TR_CLOSEPROJECT(window)
  315.               CALL TR_DELETEAPP(app)
  316.               CALL RXTR_PUBSCREENTOFRONT(PubScreen)
  317.               fromNewPub=1
  318.           CALL _MainTags
  319.             END
  320.          END
  321.       END
  322.  
  323.    ende = 0
  324.     CALL TR_UNLOCKPROJECT(window)
  325.     CALL TR_CLOSEPROJECT(PubScreenProject)
  326. END
  327. RETURN
  328.  
  329. _Einstellungen:
  330. EinstellungenTags = WindowID(3),
  331.                     WindowBackfillFB,
  332.                     WindowPosition('TRWP_MOUSEPOINTER'),
  333.                     WindowTitle('Einstellungen'),
  334.                     PubScreenName(Pubscreen),
  335.                     'HorizGroupA',
  336.                      'Space',
  337.                     'VertGroupA',
  338.                      'Space',
  339.                      Text3('Pfad der _Programme.') 'TRAT_ID 1',
  340.                      StringGadget(Prefs.1,1),
  341.                      'Space',
  342.                      Text3('Pfad des _Zielverzeichnisses.') 'TRAT_ID 2',
  343.                      StringGadget(Prefs.2,2),
  344.                      'Space',
  345.                       'BeginLine',
  346.                         Button('_Speichern',3),
  347.                         Button('_Benutzen',4),
  348.                       'EndLine',
  349.                      'Space',
  350.                     'EndGroup Space EndGroup EndGroup EndProject'
  351.  
  352.     EinstellungenProject = TR_OPENPROJECT(app,EinstellungenTags)
  353.  
  354.   IF EinstellungenProject ~= '00000000'x THEN DO
  355.     CALL TR_LOCKPROJECT(window)
  356.  
  357.       DO WHILE ende ~= 1
  358.          DO WHILE TR_HANDLEMSG(app,'event3')
  359.             IF event3.trm_class = 'TRMS_CLOSEWINDOW' THEN ende = 1
  360.              IF event3.trm_class = 'TRMS_ACTION' THEN DO
  361.               IF event3.trm_id = 3 THEN DO
  362.                 Prefs.1 = TR_GetAttribute(Einstellungenproject,1,TROB_String)
  363.                 Prefs.2 = TR_GetAttribute(Einstellungenproject,2,TROB_String)
  364.                 CALL RXTR_WRITEFILE(progdir||"/DropMe.prefs",Prefs)
  365.                ende = 1
  366.               END
  367.               IF event3.trm_id = 4 THEN DO
  368.                 Prefs.1 = TR_GetAttribute(Einstellungenproject,1,TROB_String)
  369.                 Prefs.2 = TR_GetAttribute(Einstellungenproject,2,TROB_String)
  370.                ende = 1
  371.               END
  372.             END
  373.          END
  374.       END
  375.  
  376.    ende = 0
  377.     CALL TR_UNLOCKPROJECT(window)
  378.     CALL TR_CLOSEPROJECT(EinstellungenProject)
  379. END
  380.  
  381. RETURN
  382.  
  383. /*******************************************************************************
  384. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  385. *******************************************************************************/
  386.  
  387. break_c:
  388. failure:
  389. halt:
  390. ioerr:
  391. syntax:
  392.    SAY '+++ Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)
  393.    SAY SOURCELINE(sigl)
  394.  
  395.    IF app ~= '00000000'x THEN
  396.       CALL TR_DELETEAPP(app)
  397.  
  398.    EXIT(10)
  399. /*EOS*/
  400.